package reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class test8 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        Class aClass = Class.forName("reflection.Person");
        //获得类名
        System.out.println(aClass.getName());
        System.out.println(aClass.getSimpleName());
        //获得类的属性：
        //获得public属性
        Field[] fileds =aClass.getFields();
        for(Field field:fileds){
            System.out.println(field);
        }
        //获得全部属性
        Field[] fileds1 = aClass.getDeclaredFields();
        for(Field field:fileds1){
            System.out.println(field);
        }
        //获得public中指定属性的值
        System.out.println(aClass.getField("name"));
        //获得指定属性名的值
        System.out.println(aClass.getDeclaredField("name"));

        //获得类的方法
        //获得本类及其父类的public方法
        Method[] methods =aClass.getMethods();
        for(Method method:methods){
            System.out.println(method);
        }
        //获得所有方法
        Method[] methods1 =aClass.getDeclaredMethods();
        for(Method method:methods1){
            System.out.println(method);
        }
        //获得指定的方法
        //需要指定参数类型，因为方法可能有重载
        Method method = aClass.getMethod("getName",null);
        System.out.println(method);
        Method method1 = aClass.getMethod("setName",String.class);
        System.out.println(method1);

        //获得指定构造器
        //获取所有public的构造器
         Constructor[] constructors= aClass.getConstructors();
        for(Constructor constructor:constructors){
            System.out.println(constructor);
        }
         //获得本类所有构造器
         Constructor[] constructors1= aClass.getDeclaredConstructors();
        for(Constructor constructor:constructors1){
            System.out.println(constructor);
        }
         //获得指定的构造器
         Constructor constructor = aClass.getConstructor(String.class);
         System.out.println(constructor);
    }
}
